<?php

//安装类
class Install
{
    /**
     * 被安装的sql路径
     * @var string
     */
    private $sqlFilePath;
    
    /**
     * 被安装数据库的表前缀
     * @var string
     */
    private $tablePrefix;
    
    /**
     * 基本配置
     * @var string
     */
    private $config;
    
    /**
     * Install constructor.
     */
    public function __construct()
    {
        $this->checkInstall();
        $this->init();
    }
    
    /**
     * init 初始化程序
     */
    private function init()
    {
        $this->config      = include(ROOT . 'core/config.php');
        $this->sqlFilePath = $this->config['SQL_FILE_PATH'];
        $this->tablePrefix = $this->config['TABLE_PREFIX'];
    }
    
    // 1.协议确认页
    public function index()
    {
        require_once ROOT . 'view/agreement.html';
    }
    
    // 2.环境检测
    public function testEnvironment()
    {
        require_once ROOT . 'view/test.html';
    }
    
    // 3.数据库设置
    public function setDb()
    {
        require_once ROOT . 'view/create.html';
    }
    
    // 4.数据库写入，配置写入
    public function setSys()
    {
        // 判断是否为post
        if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
            $data = $_POST;
            if( empty($data['DB_HOST']) || empty($data['DB_PORT']) || empty($data['DB_USER']) || empty($data['DB_NAME']) ) {
                exit('请将参数填写完整!');
            }
            // 连接数据库
            $link = @new mysqli("{$data['DB_HOST']}:{$data['DB_PORT']}" , $data['DB_USER'] , $data['DB_PWD']);
            // 获取错误信息
            $error = $link->connect_error;
            if( !is_null($error) ) {
                // 转义防止和alert中的引号冲突
                $error = addslashes($error);
                die("<script>alert('数据库链接失败:$error');history.go(-1)</script>");
            }
            // 设置字符集
            $link->query("SET NAMES 'utf8'");
            $link->server_info > 5.0 or die("<script>alert('请将您的mysql升级到5.0以上');history.go(-1)</script>");
            // 创建数据库并选中
            if( !$link->select_db($data['DB_NAME']) ) {
                $create_sql = 'CREATE DATABASE IF NOT EXISTS ' . $data['DB_NAME'] . ' DEFAULT CHARACTER SET utf8;';
                $link->query($create_sql) or die('创建数据库失败');
                $link->select_db($data['DB_NAME']);
            }
            // 导入sql数据并创建表
            $sqlFile  = file_get_contents($this->sqlFilePath);
            $sql_data = $this->tablePrefix != $data['DB_PREFIX'] && !empty($data['DB_PREFIX']) ? str_replace($this->tablePrefix , $data['DB_PREFIX'] , $sqlFile) : $sqlFile;
            // 读取数据库按照 ;/r/n分割成数组
            $sql_array = preg_split("/;[\r\n]+/" , $sql_data);
            // 执行sql导入数据
            foreach( $sql_array as $k => $v ) {
                if( !empty($v) ) {
                    $link->query($v);
                }
            }
            $link->close();
            touch(ROOT . 'install.lock');
            // 更新DB配置文件
            $this->wrtieConfigFile($data);
            require ROOT . 'view/success.html';
        }
    }
    
    /**
     * checkInstall
     */
    private function checkInstall()
    {
        if( file_exists('./install.lock') ) {
            exit('已执行过安装,如需重新安装请删除core中的install.lock');
        }
    }
    
    /**
     * wrtieConfigFile
     * @param $data
     */
    private function wrtieConfigFile($data)
    {
        /****************写入db配置文件，根据各框架自定义修改********************/
//         $db_str = <<<EOF
//             <?php
//             return array(
//
//             //*************************************数据库设置*************************************
//                'DB_TYPE'               =>  'mysqli',                 // 数据库类型
//                'DB_HOST'               =>  '{$data['DB_HOST']}',     // 服务器地址
//                'DB_NAME'               =>  '{$data['DB_NAME']}',     // 数据库名
//                'DB_USER'               =>  '{$data['DB_USER']}',     // 用户名
//                'DB_PWD'                =>  '{$data['DB_PWD']}',      // 密码
//                'DB_PORT'               =>  '{$data['DB_PORT']}',     // 端口
//                'DB_PREFIX'             =>  '{$data['DB_PREFIX']}',   // 数据库表前缀
//             );
// EOF;
//         // 创建数据库链接配置文件
//         file_put_contents('././Application/Common/Conf/db.php' , $db_str);
    }
}
